package com.ruoyi.customer.service.impl;

import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.customer.domain.CustomerDistribution;
import com.ruoyi.customer.mapper.CustomerDistributionMapper;
import com.ruoyi.customer.service.ICustomerDistributionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.validation.Validator;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;

/**
 * 用户分销 业务层处理
 * 
 * @author ruoyi
 */
@Service
public class CustomerDistributionServiceImpl implements ICustomerDistributionService
{

    @Autowired
    private CustomerDistributionMapper userMapper;

    @Autowired
    protected Validator validator;

    /**
     * 根据条件分页查询用户分销列表
     * 
     * @param user 用户分销信息
     * @return 用户分销信息集合信息
     */
    @Override
    @DataScope(deptAlias = "d", userAlias = "u")
    public List<CustomerDistribution> selectUserList(CustomerDistribution user)
    {
        return userMapper.selectUserList(user);
    }

    /**
     * 通过用户分销ID查询用户分销
     * 
     * @param userId 用户分销ID
     * @return 用户分销对象信息
     */
    @Override
    public CustomerDistribution selectUserById(Long userId)
    {
        return userMapper.selectUserById(userId);
    }

    /**
     * 新增保存用户分销信息
     * 
     * @param user 用户分销信息
     * @return 结果
     */
    @Override
    @Transactional
    public int insertUser(CustomerDistribution user)
    {
        // 新增用户分销信息
        int rows = userMapper.insertUser(user);
        return rows;
    }

    /**
     * 修改保存用户分销信息
     * 
     * @param user 用户分销信息
     * @return 结果
     */
    @Override
    @Transactional
    public int updateUser(CustomerDistribution user)
    {
        return userMapper.updateUser(user);
    }

    /**
     * 修改用户分销状态
     *
     * @param user 用户分销信息
     * @return 结果
     */
    @Override
    public int updateUserActive(CustomerDistribution user)
    {
        return userMapper.updateUserActive(user);
    }

    /**
     * 修改保存用户分销信息 - 提现
     *
     * @param userId 用户分销信息
     * @return 结果
     */
    @Override
    @Transactional
    public int updateUserCash(Long userId, BigDecimal amount)
    {
        CustomerDistribution user = userMapper.selectUserById(userId);
        // 用户已提佣金
        user.setMoneyGet(user.getMoneyGet().add(amount));
        user.setBalance(user.getBalance().subtract(amount));
        return userMapper.updateUserMoney(user);
    }


    /**
     * 修改保存用户分销信息 - 分佣
     *
     * @param user 用户分销信息
     * @return 结果
     */
    @Override
    @Transactional
    public int updateUserOrder(CustomerDistribution user, BigDecimal amount)
    {
        // 用户累计成交金额
        user.setMoneyOrder(user.getMoneyOrder().add(amount));
        user.setOrderCount(user.getOrderCount() + 1);

        // 设置舍入模式，这里使用四舍五入，并保留两位小数 获得的收益
        BigDecimal money = amount.multiply(new BigDecimal(user.getDistributionRate())).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
        user.setBalance(user.getBalance().add(money));
        // 用户累计佣金
        user.setMoneyTotal(user.getMoneyTotal().add(money));
        return userMapper.updateUserMoney(user);
    }

}
